package de.syfy.project.engine.interfaces;

import de.syfy.project.engine.utils.Vector2D;
import java.awt.geom.Point2D;

/**
 *
 * @author Timo
 */
public interface Movable {
    
    /*
     * Enumartion welche für Abfragen von Ausrichtungen, Bewegungen etc.
     * genutzt werden kann.
     * 
     */
    public static enum FaceDirection{NORTH, NORTH_EAST, EAST, SOUTH_EAST,
                                     SOUTH, SOUTH_WEST, WEST, NORTH_WEST
                                    }
    /*
     * Mit setPosition soll die Aktuelle Position des Sprites bestimmt werden.
     * Mögliche Nutzungen:
     *      - Bewegung
     *      - Zauber/Fähigkeiten wie Teleport
     *      - Zum berechnen des aktuellen Sichtfeldes, Sprites müssen ja bewegt werden.
     * 
     * Bemerkung: Bei dem Point.Double handelt es sich um einen Punkt, welcher
     * in java.awt.Point zufinden ist. 
     * 
     * Es handelt sich hierbei um Welt-Koordinaten.
     */  
    public void setPosition(Point2D.Float p);

    /**
     * Wird verwendet um den Character zu Bewegen. Übergabe ist ein Vector
     * der die Richtung bestimmt.
     * 
     * @param v 
     */
    public void move(Vector2D v);
    
    /*
     * Gibt den aktuellen Punkt auf der Oberfläche zurück, sollte die Grafik nicht zu sehen
     * sein wird ein null-Objekt zurückgegeben.
     */
    public Point2D.Float getPosition();
    
    /*
     * doLogic wird verwendet um Kollision zu berechnen, falls nötig!
     * Eventuell auch weitere Dinge!
     */
    public void doLogic(long delta);
}
